#include "data.h"

/* Struct de Borwein */
typedef struct
{
    int i;          /* Número de iterações */ 
	int conv;       /* Flag para convergência */
    mpf_t y[16];     
    mpf_t a[16];     
    mpf_t pi[2];    /* PI antigo e atual (para verificar convergência */
} borw;

/* Armazena os valores iniciais para o método de Borwein */
void start_values_borw(mpf_t a, mpf_t y);

/* Cálculo de y */
void calc_y(mpf_t y1, mpf_t y0);

/* Cálculo de a */
void calc_a(mpf_t a1, mpf_t a0, mpf_t y1, int k);

/* Cálculo de Pi */
void calc_pi(mpf_t a, mpf_t pi);

/* Borwein sequencial*/
void borwein(mpf_t pi, int *iter);

/* Inicializa a struct para os cálculos paralelos */
void start_struct_borw(borw *aux);

/* Limpa a struct */
void clear_struct_borw(borw *aux);

/* Thread para cálculo de y */
void *thread_calc_y(void *a);

/* Thread para cálculo de a */
void *thread_calc_a(void *a);

/* Thread para cálculo de Pi */
void *thread_calc_pi(void *a);

/* Borwein paralelo */
void borwein_paral(mpf_t pi, int *iter);
